1Writer プロジェクト別集計
code:js
// エディタ内の全テキストを取得
const content = editor.getText();
// 完了したタスクを正規表現で抽出
const completedTasks = content.match(/- \x\.*/g); if (!completedTasks) {
ui.alert("完了したタスクが見つかりませんでした。");
} else {
const projectData = {};
function parseTask(task) {
const timePattern = /(\d{1,2}:\d{2})-(\d{1,2}:\d{2})/;
const costPattern = /\\(\d+)/;
const projectPattern = /#(^\s+)/; const timeMatch = task.match(timePattern);
const costMatch = task.match(costPattern);
const projectMatch = task.match(projectPattern);
let minutes = 0;
if (timeMatch) {
const start = timeMatch1; minutes = (endHour * 60 + endMinute) - (startHour * 60 + startMinute);
}
const cost = costMatch ? parseInt(costMatch1, 10) : 0; const project = projectMatch ? projectMatch1 : 'その他'; return { project, minutes, cost };
}
// タスクを解析し、プロジェクトごとのデータを集計
for (const task of completedTasks) {
const { project, minutes, cost } = parseTask(task);
projectDataproject = { totalMinutes: 0, totalCost: 0 }; }
projectDataproject.totalMinutes += minutes; projectDataproject.totalCost += cost; }
// 集計結果を表示
const result = Object.entries(projectData).map((project, data) => { const hours = (data.totalMinutes / 60).toFixed(1); // 分を時間に変換
return ${project}\t${hours}h;
}).join("\n");
ui.alert(result, "プロジェクト集計結果");
}